package com.mastercard.assets.web.struts.forms ;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import com.mastercard.assets.web.util.to.ManejadorPaquetesAsignados;
import com.mastercard.assets.web.util.to.PaqueteAutorizado;
import com.mastercard.assets.web.util.to.UserLogin;

public class DevolverPaquetesForm
	extends
		ActionForm
{
	private ManejadorPaquetesAsignados packageManager = new ManejadorPaquetesAsignados( ) ;
	
	private int cveCuenta ;
	private int operation ;
	
	private String[] asignar = new String[ 0 ] ;
	
	private int[] asignarInt = new int[ 0 ] ;
	
	private String[ ] paqueteAutorizadoIdOrder ;
	
	public String[] getPaqueteAutorizadoIdOrder() {
		return paqueteAutorizadoIdOrder;
	}

	public void setPaqueteAutorizadoIdOrder(String[] paqueteAutorizadoIdOrder) {
		this.paqueteAutorizadoIdOrder = paqueteAutorizadoIdOrder;
	}

	public int getOperation() {
		return operation;
	}

	public void setOperation(int operation) {
		this.operation = operation;
	}

	public String[] getAsignar() {
		return asignar;
	}

	public void setAsignar(String[] asignar) {
		this.asignar = asignar;
	}

	public int getCveCuenta() {
		return cveCuenta;
	}

	public void setCveCuenta(int cveCuenta) {
		packageManager.setCveCuenta( cveCuenta ) ;
		this.cveCuenta = cveCuenta;
	}

	public ManejadorPaquetesAsignados getPackageManager( ) {
		return packageManager;
	}

	public void setPackageManager(ManejadorPaquetesAsignados packageManager) {
		this.packageManager = packageManager;
	}

	public ActionErrors validate( ActionMapping mapping , HttpServletRequest request )
	{
		ActionErrors errors = new ActionErrors( ) ;
		
		// rellena los campos de enteros
		asignarInt = new int[ asignar.length ] ;
		
		int index = 0 ;
		
		int numberOfPackagesAsigned = 0 ;
		
		// recorre las cadenas
		for( String asig : asignar )
		{
			System.out.println( "GenerarCampanaForm: Index/" + index + " : Valor/" + asig ) ;
			// intenta convertir a entero
			try
			{
				asignarInt[ index ] = Integer.parseInt( asig ) ;
				
				System.out.println( "GenerarCampanaForm: Index/" + index + " : asignarInt/" + asignarInt[ index ] ) ;
				numberOfPackagesAsigned += asignarInt[ index ] ;
				
				index++ ;
			}catch( Exception e )
			{
//				e.printStackTrace( ) ;
				asignarInt[ index++ ] = 0 ;
			}
		}
		
		System.out.println( "GenerarCampanaForm: NumPaq/" + numberOfPackagesAsigned ) ;
		// en caos de que no haya paquetes asignados
		if( numberOfPackagesAsigned == 0 )
		{
			errors.add( "NoPackage" , new ActionMessage( "com.mastercard.assets.web.modules.generarcampana.errors.NoPackageAsigned" ) ) ;
			
			return errors ;
		}
		
		// inicializa
		try
		{
			System.out.println( "GenerarCampanaForm: Inicializa PackageManager" ) ;
			packageManager.initialize( ) ;
		}catch( Exception e )
		{
			e.printStackTrace( ) ;
		}
		
		// indice
		index = 0 ;
		
		// verifica si la cantidad de asignaciones es mayor a los paquetes disponibles
		List< PaqueteAutorizado > paquetesAut = packageManager.getPaqueteAutorizadoLista( ) ;
		
		System.out.println( "GenerarCampanaForm: paquetesAut/" + paquetesAut.size( ) ) ;
//		System.out.println( "CveCuenta: " + packageManager.getCveCuenta( ) ) ;
//		System.out.println( "Tamanio: " + paquetesAut.size( ) + " - " + asignarInt.length ) ;
//		
		// recorre las asignaciones
		for( int i = 0 ; i < asignarInt.length ; i++ )
		{
			// obtiene el numero de disponibles
			PaqueteAutorizado paqAut = paquetesAut.get( i ) ;
			
			// obtiene los disponibles
			int asignados = paqAut.getCantidadAsignada( ) ;
			
			System.out.println( "GenerarCampanaForm: Paquete/" + i + " : asignados/" + asignados + " : asignarInt/" + asignarInt[ i ] ) ;
			// en caso de que haya devuelto mas de los disponibles
			if( asignarInt[ i ] > asignados )
				errors.add( "DevolucionMayorDisponible" , new ActionMessage( "com.mastercard.assets.web.errors.modules.tipocuenta.paquetesautorizados.RejectGreaterThanAsigned" , new Object[ ]{ new Integer( asignados ) , paqAut.getEvento( ).getNombre( ) , ( ( paqAut.getTipoHabitacion( ) == 1 ) ? "sencilla" : "doble" ) } ) ) ;
		}
		
		if( errors.size( ) > 0 )
		{
			UserLogin user = ( UserLogin ) request.getSession( ).getAttribute( "UserLogin" ) ;
			
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/ListarPaquetesAsignadosDesplegarFormulario.jsp" ) ;
			
			request.setAttribute( "GenerarCampanaForm" , this ) ;
		}
		
		return errors ;
	}

	public int[] getAsignarInt() {
		if( asignarInt != null && asignarInt.length > 0 )
			for( int i : asignarInt )
				System.out.println( "asignarInt: " + i ) ;
		else
			System.out.println( "asignarInt no contiene resultados" ) ;
		return asignarInt;
	}

}
